home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 5 / Amiga Tools 5.iso / tools / developer-tools / c-tools / c_examples / status / reqtools.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-05-18  |  11.3 KB  |  367 lines

  1. //////////////////////////////////////////////////////////////////////////////
  2. // ReqTools.cpp - AFrame v1.0 © 1996 Synthetic Input
  3. //
  4. // ReqTools C++ Object utilizing reqtools.library version 38.1296
  5. // by Nico François.  ReqTools is © Nico François
  6. // 
  7. //
  8. // Deryk B Robosson
  9. // Jeffry A Worth
  10. // January 20, 1996
  11. //////////////////////////////////////////////////////////////////////////////
  12.  
  13. //////////////////////////////////////////////////////////////////////////////
  14. // INCLUDES
  15. #include "AFRAME:include/reqtools.hpp"
  16.  
  17. extern struct ExecBase *SysBase;
  18. extern struct ReqToolsBase *ReqToolsBase;
  19.  
  20. #ifndef __AFREQTOOLS_DEFTAGS__
  21. #define __AFREQTOOLS_DEFTAGS__
  22.  
  23. ULONG def_screentags[] = { RTSC_Flags,SCREQF_DEPTHGAD|SCREQF_SIZEGADS|SCREQF_AUTOSCROLLGAD|SCREQF_OVERSCANGAD,TAG_END } ;
  24. ULONG def_filetags[] = { RTFI_FilterFunc,TAG_END };
  25. ULONG def_multifiletags[] = { RTFI_FilterFunc,RTFI_Flags,FREQF_MULTISELECT,TAG_END };
  26. ULONG def_dirtags[] = { RTFI_Flags,FREQF_NOFILES,TAG_END };
  27. ULONG def_volumetags[] = { RTFI_FilterFunc,RTFI_VolumeRequest,0,TAG_END };
  28. ULONG def_fonttags[] = { RTFO_FilterFunc,TAG_END };
  29. ULONG def_palettetags[] = { TAG_END };
  30. ULONG def_getlong[] = { RTGL_ShowDefault,FALSE,RTGL_Min,0,RTGL_Max,999999,TAG_END };
  31. ULONG def_getstring[] = { RTGS_GadFmt,(ULONG)"_Ok|_Cancel",RTGS_BackFill,FALSE,RTGS_Flags,GSREQF_CENTERTEXT|GSREQF_HIGHLIGHTTEXT,TAG_MORE,RT_Underscore,'_',TAG_END };
  32.  
  33. #endif //__AFREQTOOLS_DEFTAGS__
  34.  
  35. //////////////////////////////////////////////////////////////////////////////
  36. //
  37.  
  38. AFReqTools::AFReqTools()
  39.     :color(0),
  40. //    filename[0](NULL),
  41.     m_filelist(NULL),
  42.     m_screenmoderequester(NULL),
  43.     m_filerequester(NULL),
  44.     m_fontrequester(NULL)
  45. {
  46.     filename[0]=NULL;
  47.  
  48.     if(!ReqToolsBase)
  49.         if(!(ReqToolsBase=(struct ReqToolsBase *)OpenLibrary((UBYTE*)REQTOOLSNAME,(ULONG)REQTOOLSVERSION)))
  50.             printf("Unable to open reqtools.library version %ld\n",REQTOOLSVERSION);
  51. }
  52.  
  53. AFReqTools::~AFReqTools()
  54. {
  55.     if(ReqToolsBase) CloseLibrary((struct Library*)ReqToolsBase),ReqToolsBase=NULL;
  56.  
  57.     DestroyObject();
  58. }
  59.  
  60. void AFReqTools::DestroyObject()
  61. {
  62.     if(m_filelist)  rtFreeFileList(m_filelist);
  63.     if(m_screenmoderequester) rtFreeRequest(m_screenmoderequester);
  64.     if(m_filerequester) rtFreeRequest(m_filerequester);
  65.     if(m_fontrequester) rtFreeRequest(m_fontrequester);
  66.  
  67.     delete m_filelist;
  68.     delete m_screenmoderequester;
  69.     delete m_filerequester;
  70.     delete m_fontrequester;
  71.  
  72.     color=0;
  73.     filename[0]=NULL;
  74.     m_filelist=NULL;
  75.     m_screenmoderequester=NULL;
  76.     m_filerequester=NULL;
  77.     m_fontrequester=NULL;
  78. }
  79.  
  80. void AFReqTools::Create()
  81. {
  82. }
  83.  
  84. BOOL AFReqTools::EZRequest(char *text, char *gadfmt)
  85. {
  86.     return ::rtEZRequest(text,gadfmt,NULL,NULL);
  87. }
  88.  
  89. BOOL AFReqTools::EZRequestA(char *text, char *gadfmt, struct rtReqInfo *reqinfo, ULONG taglist[])
  90. {
  91.     return ::rtEZRequest(text,gadfmt,reqinfo,(struct TagItem *)taglist);
  92. }
  93.  
  94. BOOL AFReqTools::ScreenMode()
  95. {
  96.     if(SysBase->LibNode.lib_Version<37) {
  97.         rtEZRequestTags("ScreenMode requesters require\n Kickstart 2.0 or higher.\n","_Ok",NULL,NULL,RT_Underscore,'_',TAG_END);
  98.         return FALSE;
  99.     } else {
  100.         if(m_screenmoderequester=(struct rtScreenModeRequester*)rtAllocRequestA(RT_SCREENMODEREQ,NULL)) {
  101.             if(!rtScreenModeRequest(m_screenmoderequester,(char *)"Select a Screen Mode",(ULONG)RTSC_Flags,
  102.                                     (ULONG)(SCREQF_DEPTHGAD|SCREQF_SIZEGADS|SCREQF_AUTOSCROLLGAD|SCREQF_OVERSCANGAD),(ULONG)TAG_END))
  103.                 return FALSE;
  104.             else return TRUE;
  105.         } else { 
  106.             rtEZRequest((char *)"Out of memory!",(char *)"Ok!",NULL,NULL);
  107.             return FALSE;
  108.           }
  109.     }
  110. }
  111.  
  112. BOOL AFReqTools::ScreenModeA(ULONG taglist[])
  113. {
  114.     if(SysBase->LibNode.lib_Version<37) {
  115.         rtEZRequestTags("ScreenMode requesters require\n Kickstart 2.0 or higher.\n","_Ok",NULL,NULL,RT_Underscore,'_',TAG_END);
  116.         return FALSE;
  117.     } else {
  118.         if(m_screenmoderequester=(struct rtScreenModeRequester*)rtAllocRequestA(RT_SCREENMODEREQ,NULL)) {
  119.             if(!rtScreenModeRequestA(m_screenmoderequester,(char *)"Select a Screen Mode",(struct TagItem *)taglist))
  120.                 return FALSE;
  121.             else return TRUE;
  122.  
  123.         } else { 
  124.             rtEZRequest((char *)"Out of memory!",(char *)"Ok!",NULL,NULL);
  125.             return FALSE;
  126.           }
  127.     }
  128. }
  129.  
  130. BOOL AFReqTools::FileRequest()
  131. {
  132.     if(m_filerequester=(struct rtFileRequester*)rtAllocRequestA(RT_FILEREQ,NULL)) {
  133.         m_filterhook.h_Entry=(ULONG(*)())file_filterfunc;
  134.         if(!rtFileRequest(m_filerequester,filename,"Select a File",RTFI_FilterFunc,&m_filterhook,TAG_END))
  135.             return FALSE;
  136.         else return TRUE;
  137.     } else {
  138.         rtEZRequest((char *)"Out of memory!",(char *)"Ok!",NULL,NULL);
  139.         return FALSE;
  140.       }
  141. }
  142.  
  143. BOOL AFReqTools::FileRequestA(ULONG taglist[])
  144. {
  145.     if(m_filerequester=(struct rtFileRequester*)rtAllocRequestA(RT_FILEREQ,NULL)) {
  146.         m_filterhook.h_Entry=(ULONG(*)())file_filterfunc;
  147.         if(!rtFileRequestA(m_filerequester,filename,"Select a File",(struct TagItem *)taglist))
  148.             return FALSE;
  149.         else return TRUE;
  150.     } else {
  151.         rtEZRequest((char *)"Out of memory!",(char *)"Ok!",NULL,NULL);
  152.         return FALSE;
  153.       }
  154. }
  155.  
  156. BOOL AFReqTools::FilesRequest()
  157. {
  158.     if(m_filerequester=(struct rtFileRequester*)rtAllocRequestA(RT_FILEREQ,NULL)) {
  159.         m_filterhook.h_Entry=(ULONG(*)())file_filterfunc;
  160.         m_filelist=(struct rtFileList*)rtFileRequest(m_filerequester,filename,"Select Files",RTFI_FilterFunc,&m_filterhook,RTFI_Flags,FREQF_MULTISELECT,TAG_END);
  161.         if(!m_filelist)
  162.             return FALSE;
  163.         else return TRUE;
  164.     } else {
  165.         rtEZRequest((char *)"Out of memory!",(char *)"Ok!",NULL,NULL);
  166.         return FALSE;
  167.       }
  168. }
  169.  
  170. BOOL AFReqTools::FilesRequestA(ULONG taglist[])
  171. {
  172.     if(m_filerequester=(struct rtFileRequester*)rtAllocRequestA(RT_FILEREQ,NULL)) {
  173.         m_filterhook.h_Entry=(ULONG(*)())file_filterfunc;
  174.         m_filelist=(struct rtFileList*)rtFileRequestA(m_filerequester,filename,"Select Files",(struct TagItem *)taglist);
  175.         if(!m_filelist)
  176.             return FALSE;
  177.         else return TRUE;
  178.     } else {
  179.         rtEZRequest((char *)"Out of memory!",(char *)"Ok!",NULL,NULL);
  180.         return FALSE;
  181.       }
  182. }
  183.  
  184. BOOL AFReqTools::DirRequest()
  185. {
  186.     if(m_filerequester=(struct rtFileRequester*)rtAllocRequestA(RT_FILEREQ,NULL)) {
  187.         if(!rtFileRequest(m_filerequester,filename,"Select a Directory",RTFI_Flags,FREQF_NOFILES,TAG_END))
  188.             return FALSE;
  189.         else return TRUE;
  190.     } else {
  191.         rtEZRequest((char *)"Out of memory!",(char *)"Ok!",NULL,NULL);
  192.         return FALSE;
  193.       }
  194. }
  195.  
  196. BOOL AFReqTools::VolumeRequest()
  197. {
  198.     if(m_filerequester=(struct rtFileRequester*)rtAllocRequestA(RT_FILEREQ,NULL)) {
  199.         m_volume_filterhook.h_Entry=(ULONG (*)())vol_filterfunc;
  200.         if(!rtFileRequest(m_filerequester,filename,"Select a Volume",RTFI_FilterFunc,&m_volume_filterhook,RTFI_VolumeRequest,0,TAG_END))
  201.             return FALSE;
  202.         else return TRUE;
  203.     } else {
  204.         rtEZRequest((char *)"Out of memory!",(char *)"Ok!",NULL,NULL);
  205.         return FALSE;
  206.       }
  207. }
  208.  
  209. BOOL AFReqTools::FontRequest()
  210. {
  211.     if(m_fontrequester=(struct rtFontRequester*)rtAllocRequestA(RT_FONTREQ,NULL)) {
  212.         m_fontrequester->Flags=FREQF_STYLE|FREQF_COLORFONTS;
  213.         m_font_filterhook.h_Entry=(ULONG (*)())font_filterfunc;
  214.         if(!rtFontRequest(m_fontrequester,"Select a Font",RTFO_FilterFunc,&m_font_filterhook,TAG_END))
  215.             return FALSE;
  216.         else return TRUE;
  217.     } else {
  218.         rtEZRequest((char *)"Out of memory!",(char *)"Ok!",NULL,NULL);
  219.         return FALSE;
  220.       }
  221. }
  222.  
  223. BOOL AFReqTools::FontRequestA(ULONG taglist[])
  224. {
  225.     if(m_fontrequester=(struct rtFontRequester*)rtAllocRequestA(RT_FONTREQ,NULL)) {
  226.         m_fontrequester->Flags=FREQF_STYLE|FREQF_COLORFONTS;
  227.         m_font_filterhook.h_Entry=(ULONG (*)())font_filterfunc;
  228.         if(!rtFontRequestA(m_fontrequester,"Select a Font",(struct TagItem *)taglist))
  229.             return FALSE;
  230.         else return TRUE;
  231.     } else {
  232.         rtEZRequest((char *)"Out of memory!",(char *)"Ok!",NULL,NULL);
  233.         return FALSE;
  234.       }
  235. }
  236.  
  237. BOOL AFReqTools::PaletteRequest()
  238. {
  239.     color=rtPaletteRequest("Change Palette",NULL,TAG_END);
  240.  
  241.     if(color==-1)
  242.         return FALSE;
  243.     else return TRUE;
  244. }
  245.  
  246. BOOL AFReqTools::PaletteRequestA(ULONG taglist[])
  247. {
  248.     color=rtPaletteRequestA("Change Palette",m_reqinfo,(struct TagItem *)taglist);
  249.  
  250.     if(color==-1)
  251.         return FALSE;
  252.     else return TRUE;
  253. }
  254.  
  255. void AFReqTools::ScreenToFront(struct Screen *screen)
  256. {
  257.     rtScreenToFrontSafely(screen);
  258. }
  259.  
  260. void AFReqTools::SetWaitPointer(struct Window *win)
  261. {
  262.     rtSetWaitPointer(win);
  263. }
  264.  
  265. BOOL AFReqTools::LockWindow(struct Window *win)
  266. {
  267.     m_windowlock=(APTR)rtLockWindow(win);
  268.     return TRUE;
  269. }
  270.  
  271. void AFReqTools::UnlockWindow(struct Window *win, APTR winlock)
  272. {
  273.     rtUnlockWindow(win,winlock);
  274. }
  275.  
  276. ULONG AFReqTools::GetLong(char *title, struct rtReqInfo *reqinfo)
  277. {
  278.     ULONG ret;
  279.     if(!(ret=rtGetLong((ULONG *)&longvar,title,reqinfo,RTGL_ShowDefault,FALSE,RTGL_Min,0,RTGL_Max,999999,TAG_END)))
  280.         return FALSE;
  281.     else return ret;
  282. }
  283.  
  284. ULONG AFReqTools::GetLongA(char *title, struct rtReqInfo *reqinfo, ULONG taglist[])
  285. {
  286.     ULONG ret;
  287.     if(!(ret=rtGetLongA((ULONG *)&longvar,title,reqinfo,(struct TagItem *)taglist)))
  288.         return FALSE;
  289.     else return ret;
  290. }
  291.  
  292. ULONG AFReqTools::GetString(UBYTE *buffer, ULONG maxchars, char *title, struct rtReqInfo *reqinfo)
  293. {
  294.     ULONG ret;
  295.  
  296.     if(!(ret=rtGetString(buffer, maxchars, title, reqinfo, RTGS_GadFmt, "_Ok|_Cancel",RTGS_BackFill,FALSE,RTGS_Flags,GSREQF_CENTERTEXT|GSREQF_HIGHLIGHTTEXT,TAG_MORE,RT_Underscore,'_',TAG_END)))
  297.         return FALSE;
  298.     else return ret;
  299. }
  300.  
  301. ULONG AFReqTools::GetStringA(UBYTE *buffer, ULONG maxchars, char *title, struct rtReqInfo *reqinfo, ULONG taglist[])
  302. {
  303.     ULONG ret;
  304.  
  305.     if(!(ret=rtGetStringA(buffer, maxchars, title, reqinfo, (struct TagItem *)taglist)))
  306.         return FALSE;
  307.     else return ret;
  308. }
  309.  
  310. ULONG AFReqTools::GetVScreenSize(struct Screen *screen, ULONG *widthptr, ULONG *heightptr)
  311. {
  312.     ULONG spacing;
  313.  
  314.     if(!(spacing=rtGetVScreenSize(screen,widthptr,heightptr)))
  315.         return FALSE;
  316.     else return spacing;
  317. }
  318.  
  319.  
  320. BOOL __asm __saveds file_filterfunc (register __a0 struct Hook *filterhook,
  321.        register __a2 struct rtFileRequester *req,
  322.        register __a1 struct FileInfoBlock *fib)
  323. {
  324.     // examine fib to decide if you want this file in the requester
  325.     return TRUE;
  326. }
  327.  
  328. BOOL __asm __saveds vol_filterfunc (
  329.     REG __a0 struct Hook *hook,
  330.     REG __a2 struct rtFileRequester *filereq,
  331.     REG __a1 struct rtVolumeEntry *volentry
  332.     )
  333. {
  334.     // examine volentry to decide which volumes you want in this requester
  335.     return TRUE;
  336. }
  337.  
  338. BOOL __asm __saveds font_filterfunc (
  339.     REG __a0 struct Hook *hook,
  340.     REG __a2 struct rtFontRequester *fontreq,
  341.     REG __a1 struct TextAttr *textattr
  342.     )
  343. {
  344.     // examine textattr to decide which fonts you want in this requester
  345.     return TRUE;
  346. }
  347.  
  348. AFString* AFReqTools::GetFileName()
  349. {
  350.     AFString temp;
  351.  
  352.     if(m_filerequester->Dir) {
  353.         temp=m_filerequester->Dir;
  354.         if(temp[temp.length()-1] != ':') {
  355.             temp += "/";
  356.             temp += filename;
  357.             return (AFString*)temp;
  358.         } else {
  359.             temp += filename;
  360.             return (AFString*)temp;
  361.           }
  362.     } else {
  363.         temp = filename;
  364.         return (AFString*)temp;
  365.       }
  366. }
  367.